本文以PC平台说明。所用素材为:http://pan.baidu.com/s/1sOuK2/
情况一:
一张jpg图片分辨率1024*768,在PC上占用的空间为762KB。
复制50张。
1:放到StreamingAssets目录下
打包后,50张图在生成的包的StreamingAssets目录下,且每个图片的空间为762KB。
StreamingAssets目录大小为37.2MB。即没有压缩、没有二进制打包。StreamingAssets目录下的保持原样。在Unity中改变图片的纹理压缩格式,对打出的包的大小没有影响,即只和原始格式有关。
2:放到Resources目录下
图片的纹理格式为RGB ETC1 4bit时,每个图占用内存384KB(逐像素算,不同于外存中图片大小的算法)。384*50=19200
再看最终resources.assets文件大小为19208KB(18.7MB)。即约等于每个图片的内存大小之和。
情况二:
对该jpg图片进行压缩。
本人使用Sage Thumbs的右键快捷方式:转换为jpg,把50个图片转换了一下(保持尺寸不变),每个图片在PC的存储空间从762KB变成184KB。
再放到StreamingAssets下打包,StreamingAssets包的大小变为8.99MB。
放到resources目录下打包,依旧使用RGB ETC1 4bit。最终结果依旧为19208KB(18.7MB)。
综上:图片若是放在StreamingAssets目录下,尽量减少图片的占用空间,从而减少包的尺寸。
Resources目录下打包,图片最终占用空间和其最终运行时占用的内存一致,即跟其纹理压缩格式有关。另外Resources目录打包后是以二进制格式保存的,比较安全。
情况三:
打assetbundle
回到每张图外存762KB的情况,使用RGB ETC1 4bit (每个图384KB)的纹理压缩格式。对每个图打成assetbundle,每个assetbundle大小为200KB。
再使用RGB 16bit(每个图占用1.5MB)的纹理压缩格式,每个图的assetbundle大小为470KB。
再使用RGB 16bit的纹理压缩格式,再把图片外存改成184KB(按照上述情况二所述),打出的assetbundle大小为582KB。
综上:可见assetbundle大小也和纹理压缩格式有关,纹理压缩格式占用空间越大,bundle也越大。相对来说assetbundle在纹理压缩的基础上还进一步压缩了,从而减少大小。
另外和原始外存压缩格式也有关,具体关系本人也没有深究。
由于assetbundle一般不放到Resources目录下,所以这里不讨论放到Resources目录下的情况。
(实际上我也测试了一下,把assetbundle单独放到Resources目录下,打出的包没有resources.assets这个文件)